<?php
	include_once("../php/DBHandler.php");
	include_once("../php/Scheduler.php");
	include_once("../php/ProcessHandler.php");
	
	/*Haendler inizialesierung*/
	$bts_handler = new DBHandler();
	$bts_handler->connect();
	$bts_handler->delete_old();
	
	$bts_scheduler = new Scheduler ();
	$bts_ProcessHandler = new ProcessHandler ();
	$bts_ProcessHandler->setDummyProcessArray($bts_handler->get_processes());
	
	/*Fuer Fehlerabfrage benoetigte Member*/
	$fehlerDummy = '';
	$fehlerRandom = '';
	$fehlerRR = '';
	$fehlerScheduler = '';
	$fehler = false;
	
	$openTab = 1;
	
	/*Standart ueberpruefung erleichtern*/
	function ueberpruefung ($value){
		return (isset($_POST[$value]) && !is_array($_POST[$value]) && ($_POST[$value] != ''));	
	}
	
	if (isset($_POST['senden'])){
		if ($_POST['senden'] == 'Speichern'){
			if (!(ueberpruefung('name') && strlen ($_POST['name']) > 0 && strlen ($_POST['name']) < 11)){
				$fehlerDummy .= '<a>Bitte geben Sie einen Namen ein.</a><br />';
				$fehler = true; 
			}
			
			if (!(ueberpruefung('cpulaufzeit') &&($_POST['cpulaufzeit']+0) > 0 &&($_POST['cpulaufzeit']+0) < 501)){
				$fehlerDummy .= '<a>Bitte geben Sie eine CPU Laufzeit von 0 bis max.500 ein. </a><br />';
				$fehler = true;
			}
			
			if (!(ueberpruefung('ankunftszeit') &&($_POST['ankunftszeit']+0) > -1 &&($_POST['ankunftszeit']+0) < 101)){
				$fehlerDummy .= '<a>Bitte geben Sie eine Ankunfzeit von 1 bis max.100 ein. </a><br />';
				$fehler = true;
			}
			
			if (!(ueberpruefung('prioritaet') &&($_POST['prioritaet']+0) > 0 &&($_POST['prioritaet']+0) < 101)){
				$fehlerDummy .= '<a>Bitte geben Sie eine Priorität von 0 bis max.100 ein. </a><br />';
				$fehler = true;
			}
			
			if ($fehler == false){
				$name = htmlspecialchars($_POST['name']);
				$cpulaufzeit = htmlspecialchars($_POST['cpulaufzeit']);
				$ankunfszeit = htmlspecialchars($_POST['ankunftszeit']);
				$prioritaet = htmlspecialchars($_POST['prioritaet']); 
				$bts_handler->create_process($name, $cpulaufzeit, $ankunfszeit, $prioritaet);
			}
		} else if ($_POST['senden'] == 'Hinzufügen'){
			if( ueberpruefung('anzahl') && ($_POST['anzahl']+0) > 0 && ($_POST['anzahl']+0) < 201){
				$bts_handler->random_processes($_POST['anzahl']);
			}else {
				$fehlerRandom = 'Die Zahl muss 1 bis 200 sein.';	
			}
		} else if ($_POST['zuruecksetzenD'] == 'Zurücksetzen'){
			$_POST['name']='';
			$_POST['cpulaufzeit']='';
			$_POST['ankunfzeit']='';
			$_POST['prioritaet']='';
			$_POST['anzahl']='';
		}else if ($_POST['zuruecksetzenR'] == 'Zurücksetzen'){
			$_POST['anzahl']='';
		}
	}
	
	if ($_POST['loeschen'] == 'Liste löschen'){
			$bts_handler->reset_processlist();
	}
		
	if (isset($_POST['scheduler']) && !is_array($_POST['scheduler'])) {
		if (count ($bts_ProcessHandler->getProcessArray())== 0 ){
			$fehlerScheduler = '<a>Bitte f&uuml;gen Sie zuerst in Schritt 1 einen Prozess hinzu.</a>';
			$openTab = 2;
		} else if($_POST['scheduler'] == 'Round Robing RR'){
			if (ueberpruefung('quantum') && ($_POST['quantum']+0) > 0 &&($_POST['quantum']+0) < 41){
				$bts_ProcessHandler->resetHandler();
				$bts_ProcessHandler = $bts_scheduler->RoundRobin($bts_ProcessHandler,$bts_ProcessHandler->getTimeQuantum());
			}else {
				$fehlerRR = '<a>Das Quantum muss zwischen 1 ms und 40 ms sein.</a><br />';
				$openTab = 2;
			}
			schedulingFehlerCheck($bts_ProcessHandler);
		} else if ($_POST['scheduler'] == 'First Come First Served FCFS'){
			$bts_ProcessHandler->resetHandler();
			$bts_ProcessHandler = $bts_scheduler->FirstComeFirstServed($bts_ProcessHandler);
			schedulingFehlerCheck($bts_ProcessHandler);
		} else if ($_POST['scheduler'] == 'Last Come First Served LCFS'){
			$bts_ProcessHandler->resetHandler();
			$bts_ProcessHandler = $bts_scheduler->LastComeFirstServed($bts_ProcessHandler);
			schedulingFehlerCheck($bts_ProcessHandler);
		} else if ($_POST['scheduler'] == 'Shortest Job First SJF'){
			$bts_ProcessHandler->resetHandler();
			$bts_ProcessHandler = $bts_scheduler->ShortestJobFirst($bts_ProcessHandler);
			schedulingFehlerCheck($bts_ProcessHandler);
		} else if ($_POST['scheduler'] == 'Longest Job First LJF'){
			$bts_ProcessHandler->resetHandler();
			$bts_ProcessHandler = $bts_scheduler->LongestJobFirst($bts_ProcessHandler);
			schedulingFehlerCheck($bts_ProcessHandler);
		} else if ($_POST['scheduler'] == 'Longest Remaining Time First LRTF'){
			$bts_ProcessHandler->resetHandler();
			$bts_ProcessHandler = $bts_scheduler->LongestRemainingTimeFirst($bts_ProcessHandler);
			schedulingFehlerCheck($bts_ProcessHandler);
		} else if ($_POST['scheduler'] == 'Shortest Remaining Time First SRTF'){
			$bts_ProcessHandler->resetHandler();
			$bts_ProcessHandler = $bts_scheduler->ShortestRemainingTimeFirst($bts_ProcessHandler);
			schedulingFehlerCheck($bts_ProcessHandler);
		}else if ($_POST['scheduler'] == 'Prioritätengesteuertes Scheduling PS'){
			$bts_ProcessHandler->resetHandler();
			$bts_ProcessHandler = $bts_scheduler->PrioritaetengesteuertesScheduling($bts_ProcessHandler);
			schedulingFehlerCheck($bts_ProcessHandler);
		}
		if($openTab != 2){
			$openTab = 3;
		}
	}
	
	$bts_ProcessHandler->setDummyProcessArray($bts_handler->get_processes());
		
	/*Scheduling Fehler Check*/
	function schedulingFehlerCheck($bts_ProcessHandler){
		if (!$bts_ProcessHandler->checkVerfahren()){
				$fehlerScheduler = '<a>Das Scheduling Verfahren wurde Fehler erkannt.</a>';
				$openTab = 2;
		}
	}
	
	/*//--------------------------------------Test-----------------------------------
	$max_time = $bts_ProcessHandler->getArriveTimeHigh ();
	for($i = 0; $i<$max_time+1;$i++){
	echo "-- ".$i." ms --<br>";
		foreach($bts_ProcessHandler->getProcessAtArriveTime($i) as $arrivingProcess){
			echo $arrivingProcess->getName()."<br>";
		}
	echo "<br>";
	}
	//--------------------------------------Test Ende------------------------------*/
?>
<!DOCTYPE HTML>
<html>
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>BTS Creative Labs</title>
        <link href="../css/main.css" rel="stylesheet" type="text/css">
        <link href="../css/accordion.css" rel="stylesheet" type="text/css">
   		<script src="../script/accordion.js" type="text/javascript"></script>
</head>
    <body onload="runAccordion(<?echo $openTab;?>);">
    <div id="wapper">
            <div id="head">
                <div id="banner">
                    <div id="instLogo">
                        <a href="http://www.informatik.hs-mannheim.de/"><img src="../media/images/Informatik Logo.jpg" width="260" height="90" alt="Fakultät Informatik Logo" longdesc="http://www.informatik.hs-mannheim.de/"></a>
                    </div>
                    <div id="fhLogo">
                        <a href="http://www.hs-mannheim.de"><img src="../media/images/fhlogo.jpg" width="165" height="91" alt="HS Mannheim Logo" longdesc="http://hs-mannheim.de"></a>
                    </div>
                </div>
                <div id="main-menue">
                    <img src="../media/images/mmbl.gif" width="38" height="61" alt="Banner Rand Linker metallern mit Schraube" id="schraubelinks">
                    <div id="nav">
                        <div id="first-nav">
                            <a class="unselected" href="../index.php">Home</a>
                            <a class="selected" href="#">Scheduling</a>
                            <a class="unselected" href="../seiten/info.html">Infos</a>
                        </div>
                    </div>
                    <img src="../media/images/mmbr.gif" width="38" height="61" alt="Banner Rand Rechts metallern mit Schraube" id="schrauberechts">
                </div>
            </div>
            <div id="contend">
			<div id="AccordionContainer" class="AccordionContainer">
			<!-- Content Start -->
			<div onclick="runAccordion(1);">
				<div class="AccordionTitle" onselectstart="return false;">
					Schritt 1: Prozesse erstellen
				</div>
			</div>
			<div id="Accordion1Content" class="AccordionContent">
				<!--accordion 1 content-->
                <div id="processdummys">
                      <h1>Prozess Dummys</h1>
                      <div id="custom">
                          <h1>Custom Add</h1>
                          <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
                              <div class="label">
                                  <a>Name:</a><br />
                                  <a>CPU-Laufzeit:</a><br />
                                  <a>Priorit&auml;t:</a><br />
                                  <a>Ankunftszeit:</a><br />
                              </div>
                              <div class="input">
                                  <input type="text" name="name"  size="10"/><br />
                                  <input type="text" name="cpulaufzeit" size="10" /><br />
                                  <input type="text" name="prioritaet" size="10" /><br />
                                  <input type="text" name="ankunftszeit" size="10"/><br />
                              </div>
                              <div class="description">
                                  <a class="bsp">Bsp.: Prozess 1, (min.1 max.10 Zeichen)</a><br />
                                  <a>ms</a><a class="bsp"> Bsp.: 25 ms, (min.0 max.500 ms)</a><br />
                                  <a class="bsp">Bsp.: 15, (min.1 max.100)</a><br />
                                  <a>ms</a><a class="bsp"> Bsp.: 50 ms,(min.0 max.100 ms)</a>
                              </div>
                              <div class="end">
                                  <input type="submit" name="senden" value="Speichern">
                                  <input type="submit" name="zuruecksetzenD" value="Zur&uuml;cksetzen">
                              </div>
                          </form>
                          <?php
                              if ($fehler){
                                  echo '<div class="fehler"><h1>Fehler</h1>';
                                  echo $fehlerDummy .'</div>';
                              }
                          ?>
                      </div>
                      <div id="random">
                          <h1>Random Add</h1>
                          <form action="<? echo $_SERVER['PHP_SELF']?>" method="POST">
                              <div class="label">
                                  <a>Anzahl:</a><br />
                              </div>
                              <div class="input">
                                  <input type="text" name="anzahl" size="4"><br />
                              </div>
                              <div class="description">
                                  <a class="bsp">Prozesse Bsp.: 20 (max. 200)<br />Empfolen: max.20</a><br />
                              </div>
                              <div class="end">
                                  <input type="submit" name="senden" value="Hinzuf&uuml;gen">
                                  <input type="submit" name="zuruecksetzenR" value="Zur&uuml;cksetzen">
                              </div>
                          </form>
                          <?php
                              if ($fehlerRandom != ''){
                                  echo '<div class="fehler"><h1>Fehler</h1>';
                                  echo $fehlerRandom .'</div>';
                              }
                          ?>
                      </div>
                </div>
                  <div id="processlist">
                      <br />
                      <form action="<? echo $_SERVER['PHP_SELF'] ?>" method="POST">
                       	<input type="submit" name="loeschen" value="Liste l&ouml;schen">
                      </form>
                      <br />
                      <table width="780" border="1" summary="Zeigt die Liste der Prozesse in der Reihenfolge in der Sie hinzugef&uuml;gt wurden.">
                        <caption>
                            Liste der Prozesse
                        </caption>
						<?php
                            echo $bts_ProcessHandler->getTabelHaed();
                            echo $bts_ProcessHandler->getDummyProcesses();
                        ?>
                      </table>
                  </div>
				<!--accordion 1 content Ende-->
			</div>

			
			<div onclick="runAccordion(2);">
				<div class="AccordionTitle" onselectstart="return false;">
				Schritt 2: Scheduling Verfahren w&auml;hlen
				</div>
			</div>
			<div id="Accordion2Content" class="AccordionContent">
				<!--accordion 2 content-->
							<p>Bitte W&auml;hlen Sie eine der Scheduling verfahren:</p>
                            <form action="<? echo $_SERVER['PHP_SELF'] ?>" method="POST">
                                 <a>Quantum: </a><input type="text" name="quantum" size="2" /> <input type="submit" name="scheduler" value="Round Robing RR"><br />
                                <input type="submit" name="scheduler" value="Priorit&auml;tengesteuertes Scheduling PS"><br />
                				<input type="submit" name="scheduler" value="First Come First Served FCFS"><br />
                                <input type="submit" name="scheduler" value="Last Come First Served LCFS"><br />
                    			<input type="submit" name="scheduler" value="Shortest Job First SJF"><br />
                   				<input type="submit" name="scheduler" value="Longest Job First LJF"><br />
                    			<input type="submit" name="scheduler" value="Longest Remaining Time First LRTF"><br />
                    			<input type="submit" name="scheduler" value="Shortest Remaining Time First SRTF"><br />                  			
                            </form>
                            <?php
								if (($fehlerRR != '' || $fehlerScheduler != '') && isset($_POST['scheduler'])){
									echo '<div class="fehler"><h1>Fehler</h1>';
									echo $fehlerRR;
									echo $fehlerScheduler.'</div>';
								}
							?>
				<!--accordion 2 content Ende-->			
			</div>
			<div onclick="runAccordion(3);">
				<div class="AccordionTitle" onselectstart="return false;">
				Schritt 3: Ergebnis
				</div>
			</div>
				<div id="Accordion3Content" class="AccordionContent">
					<!--accordion 3 content-->
						    <div id="result">
                        		<div id="main-data">
                                <?php
								  if ($bts_ProcessHandler->getVerfahren() != 'keins'){
										  echo '<h1>Scheduling Verfahren:'.$bts_ProcessHandler->getVerfahren().'</h1><br />';
										  echo '<a>Anzahl der Prozesse: '.$bts_ProcessHandler->getNumberOfProcess().'</a><br /><br />';
								  }
                                ?>
                                <div class="data">
                                 <?php
									if ($bts_ProcessHandler->getVerfahren() != 'keins'){
										echo '<a>Laufzeit insgesamt: '. $bts_ProcessHandler->getRuningTime().' ms<br />';
										echo 'Durchschnittliche Laufzeit: '. $bts_ProcessHandler->getRuningTimeAlg().' ms</a><br /><br />';
									}
								?>
                                </div>
                                 <div class="data">
                                 <?php
									if ($bts_ProcessHandler->getVerfahren() != 'keins'){
										echo '<a>Wartezeit insgesamt: '. $bts_ProcessHandler->getWaitingTime().' ms<br />';
                        				echo 'Durchschnittliche Wartezeit: '. $bts_ProcessHandler->getWaitingTimeAlg().' ms</a><br /><br />';
									}
								?>
                                </div>
                                <div class="data">
                                <?php
									if ($bts_ProcessHandler->getVerfahren() != 'keins'){										
										echo '<a>H&ouml;chste Ankunfszeit: '. $bts_ProcessHandler->getArriveTimeHigh().' ms<br />';
                        				echo 'Niedrigste Ankunfszeit: '. $bts_ProcessHandler->getArriveTimeLow().' ms</a><br />';
									}
                                   ?>              
                                </div>
                                 <div class="data">
                                <?php
									if ($bts_ProcessHandler->getVerfahren() != 'keins'){										
                        				echo '<a>H&ouml;chste Priorit&auml;t: '. $bts_ProcessHandler->getHighestPriority().'<br />';
                        				echo 'Niedrigste Priorit&auml;t: '. $bts_ProcessHandler->getLowestPriority().'</a><br /><br />';
									}
                                   ?>              
                                </div>      
                        		</div>
                        		<div id="list-of-process">
                        			<table width="400px" border="1" summary="Zeigt die Liste der Prozesse in der Reihenfolge die der Algorithmus geliefert hat.">
                            			<caption>
        									Liste der Prozesse
    									</caption>
                        				<?php
											if ($bts_ProcessHandler->getVerfahren() != 'keins'){
												$bts_ProcessHandler->printReset ();
                          						echo $bts_ProcessHandler->getTabelHaed();
                          						while ($bts_ProcessHandler->hasMore()){
                              						echo $bts_ProcessHandler->getNext();
                          						}
											}
                      					?>
									</table>
                        		</div><!--list-of-process ende-->
                                  <div id="timeLine">
                                    	<h1>Zeitstrahl</h1>
                                        <?php
											if ($bts_ProcessHandler->getVerfahren() != 'keins'){
                              						echo $bts_ProcessHandler->getTimeLine();
											}
										?>
                                </div>
                                <br class="clearer" /> 
                        	</div><!--result ende-->
					<!--accordion 3 content Ende-->
				</div>
			</div>
			<!-- Content end -->
                   </div>
            <div id="fotter">
                <img src="../media/images/mmbl.gif" width="38" height="61" alt="Banner Rand Linker metallern mit Schraube" id="schraubelinks">
                <div id="fottershild">
                    <a>Copyright by Creativ Labs</a>
                </div>
                <img src="../media/images/mmbr.gif" width="38" height="61" alt="Banner Rand Rechts metallern mit Schraube" id="schrauberechts">
            </div>
    </div>
    </body>
</html>